/*
 * Modelo0.h
 *
 *  Created on: 23/06/2012
 *      Author: natuchis
 */

#ifndef MODELO0_H_
#define MODELO0_H_

#include "Modelo.h"
#include "Datos.h"
#include "Caracter.h"

#include <set>
#include <map>
#include <iostream>
using namespace std;

class Modelo0: public Modelo {

public:

	Modelo0();
	virtual ~Modelo0();
	void actualizar (string contexto, char carac);
	void comprimir(string contexto, char carac, set<char> *excluidos, Datos &datos, bool estoyEnElEof);

	void actualizarModeloYExcluidos(string contexto, char carac, set<char> *excluidos);

	bool existeCaracterEnEsteContexto(string contexto, char carac);

	void agregarCaracter(char carac);
	bool existeCaracter(char carac);

	void agregarContexto(string contexto);

	unsigned long int getFrecuenciaTotal(string contexto);

	void setExcluidos(string contexto, set<char> *excluidos);
	unsigned long int getFrecuenciaTotalExcluidos(string contexto, set<char> *excluidos);

	void getMapa(string contexto, map<string,Caracter> &mapa, set<char> *excluidos);

	unsigned long int getFrecuenciaEsc(string contexto);

	unsigned long int getCantExcluidosPresentesEnModelo(string contexto, set<char> *excluidos);

private:

	map <char, Caracter*> *mapaCarac;
	map <char, Caracter*>::iterator itMapaCarac;

	unsigned long int cantFrecuenciaTotal;

	void agregarCaracteresNoExcluidos(map<string, Caracter> &mapa, set<char> *excluidos);

};

#endif /* MODELO0_H_ */
